make中的每个命令行都在自己的子shell中运行。因此,运行exit只会退出该子shell--而不是整个makefile。默认情况下,如果任意子shell返回不成功的退出状态,则make执行将停止(按照惯例,0表示成功,因此任何其他状态都将停止执行)。最简单的方法是使用test命令的退出状态: 代码语言:javascript复制all: foo
foo:
test -s /opt/local/bin/gsort打印诊断消息会使事情变得稍微复杂一些,因为像echo这样的命令将返回0的退出状态,从而导致make认为一切正常。要解决此问题,您需要在它之后运行一个命令,该命令将给子shell一个非零的退出状态: 代码语言:javascript复制all: foo
foo:
test -s /opt/local/bin/gsort || { echo "GNU sort does not exist! Exiting..."; exit 1; }或者甚至只是 代码语言:javascript复制all: foo
foo:
test -s /opt/local/bin/gsort || { echo "GNU sort does not exist! Exiting..."; false; }
|